package Class;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author burger NET
 */
public class Encoding {
    private int pwLong,rows,cols;
    String palabra;
    public Encoding(String palabra)
    {
        this.palabra = palabra;
    }

    public Encoding()
    { }

    /* Este metodo nos sirve para saber si la longitu es numero primo o no,
     * Si es numero primo regresa un falso, y si no un verdadero. */
    private boolean longPass(int l)
    {
        for (int i = 2; i < l; i++)
            if (l % i == 0)
                return true;
        return false;
    }

    /* Este metodo nos sirve para saber las dimensiones de la matriz, que se
     * creara para guardar los caracteres ya codificados. */
    private void matriz(int n)
    {
        for (int r = 5; r >= 2 ; r--)
        {
            int c = (n / r);
            if(c*r == n){
                rows = r;
                cols = c;
                break;
            }
        }
    }

    /* Verifica que todos los caracteres del password sean letras (A-Z ó a-z)
     * o que sean numeros (0-9). 
     * Regresa un falso si encuantra algun caracter que no sea letra ni numero.
     */
    public boolean verificaC(String palabra)
    {
        for (int i = 0; i < palabra.length(); i++)
            if (!Character.isLetter(palabra.charAt(i)) && !Character.isDigit(palabra.charAt(i)))
                return false;
        return true;
    }
    
    public boolean verificaC()
    {
        for (int i = 0; i < palabra.length(); i++)
            if (!Character.isLetter(palabra.charAt(i)) && !Character.isDigit(palabra.charAt(i)))
                return false;
        return true;
    }

    private String encodeOrd(String palabra,int saltos)
    {
        String str = "";
        for (int i = 0; i < palabra.length(); i++)
        {
            int c = (int)palabra.charAt(i) - saltos;
            str += (char)c;
        }
        return str;
    }

    public String encode()
    {
        String strC="";
        pwLong = palabra.length();
        if (!longPass(pwLong))
            pwLong++;
        matriz(pwLong);
        strC = encodeOrd(palabra, palabra.length());
        return strC;
    }
    
    public String encode(String palabra)
    {
        String strC="";
        pwLong = palabra.length();
        if (!longPass(pwLong))
            pwLong++;
        matriz(pwLong);
        strC = encodeOrd(palabra, palabra.length());
        return strC;
    }
}